/**
 * 文件依赖关系接口定义
 */
export interface IDependency {
  /** 依赖模块名称或路径 */
  name: string;
  /** 依赖类型：local(本地文件) | package(npm包) | workspace(工作空间包) | root(根目录文件) */
  type: 'local' | 'package' | 'workspace' | 'root';
  /** 依赖的完整路径 */
  path: string;
  /** 是否为动态导入 */
  isDynamic: boolean;
  /** 导入的具体内容（named imports, default import等） */
  imports?: string[];
}

/**
 * 文件分析结果接口
 */
export interface IFileAnalysis {
  /** 文件路径 */
  filePath: string;
  /** 文件类型 */
  fileType: 'vue' | 'ts' | 'tsx' | 'js' | 'jsx';
  /** 依赖列表 */
  dependencies: IDependency[];
  /** 导出的内容 */
  exports: string[];
  /** 是否为组件文件 */
  isComponent: boolean;
  /** 包所属（如果是 workspace 包的话） */
  workspacePackage?: string;
}

/**
 * 包分析结果接口
 */
export interface IPackageAnalysis {
  /** 包名称 */
  name: string;
  /** 包路径 */
  path: string;
  /** 包类型：workspace(工作空间包) | root(根包) */
  type: 'workspace' | 'root';
  /** 包内文件分析结果 */
  files: IFileAnalysis[];
  /** 包依赖的其他包 */
  packageDependencies: string[];
  /** 包引用根目录文件的统计 */
  rootFileReferences: number;
}

/**
 * 依赖树节点接口
 */
export interface IDependencyTreeNode {
  /** 节点名称（文件路径或包名） */
  name: string;
  /** 节点类型 */
  type: 'file' | 'package';
  /** 子节点 */
  children: IDependencyTreeNode[];
  /** 依赖深度 */
  depth: number;
  /** 依赖数量 */
  dependencyCount: number;
  /** 是否为循环依赖 */
  isCircular: boolean;
}

/**
 * 循环依赖信息接口
 */
export interface ICircularDependency {
  /** 循环依赖的唯一标识 */
  id: string;
  /** 循环依赖涉及的文件路径列表 */
  files: string[];
  /** 循环依赖的长度（涉及文件数量） */
  length: number;
  /** 循环依赖类型：file(文件间) | package(包间) */
  type: 'file' | 'package';
  /** 循环路径详情 */
  path: ICircularPath[];
  /** 危险等级：low | medium | high */
  severity: 'low' | 'medium' | 'high';
  /** 建议的解决方案 */
  suggestions: string[];
  /** 影响范围（被此循环影响的其他文件数量） */
  impactScope: number;
}

/**
 * 循环路径接口
 */
export interface ICircularPath {
  /** 源文件路径 */
  from: string;
  /** 目标文件路径 */
  to: string;
  /** 依赖类型 */
  dependencyType: 'local' | 'package' | 'workspace' | 'root';
  /** 导入的具体内容 */
  imports?: string[];
  /** 是否为动态导入 */
  isDynamic: boolean;
  /** 在源文件中的行号（如果可获得） */
  lineNumber?: number;
}

/**
 * 项目分析结果接口
 */
export interface IProjectAnalysis {
  /** 项目名称 */
  projectName: string;
  /** 项目路径 */
  projectPath: string;
  /** 是否为 monorepo */
  isMonorepo: boolean;
  /** 包分析结果列表 */
  packages: IPackageAnalysis[];
  /** 依赖树 */
  dependencyTree: IDependencyTreeNode;
  /** 循环依赖详细信息 */
  circularDependencies?: ICircularDependency[];
  /** 分析统计 */
  statistics: {
    /** 总文件数 */
    totalFiles: number;
    /** 总依赖数 */
    totalDependencies: number;
    /** 包间依赖数 */
    packageDependencies: number;
    /** 根目录文件引用数 */
    rootFileReferences: number;
    /** 循环依赖数 */
    circularDependencies: number;
    /** 最大依赖深度 */
    maxDepth: number;
  };
  /** 分析时间 */
  analysisTime: string;
}
